import axios from 'axios'
import store from '../store'

// 创建一个axios实例对象
const instance = axios.create({
    //baseURL: 'http://kumanxuan1.f3322.net:8881/cms', //基本 
    baseURL: "/api",
    timeout: 3000
})

// 响应不被缓存
instance.defaults.headers = {
    'Cache-Control': 'no-cache',
    Pragma: 'no-cache',
    Expires: '0'
}

// 请求拦截器
instance.interceptors.request.use(config=>{
    // 1.什么时候执行这个函数? -- 每次请求发送前都会
    // 2.config 是什么? -- 是一个对象，关于本次请求信息的对象。一般在上面设置请求头。而且要当返回值返回出去
    // 3.函数可以做什么?  -- 添加请求头

    // 有token就把它带上
    const token = localStorage.getItem("x-auth-token");
    if (token) {
      // 判断是否存在token，如果存在的话，则每个请求的请求头上都加上token
      config.headers["x-auth-token"] = token; 
    }

    // 登录api请求头处理
    if (config.url === "/sendSMS" || config.url === "/wechatUsers/PCLogin" || config.url === "/phoneRegin") {
        config.headers["Content-Type"] = "application/x-www-form-urlencoded";
    }

    return config
},err=>{
    return Promise.reject(err)
})

// 响应拦截器
instance.interceptors.response.use(res=>{
    // 1.什么时候执行这个函数? -- 在接收响应之后，数据进入组件之前执行
    // 2.res是什么?  -- res是axios封装好的一个响应对象，里面包含了后端API给我们的数据
    // 3.这个函数用来做什么?  -- 可以对响应回来的数据进行统一处理

    let ret = res.data
    
    // 统一处理错误
    if(ret.code != 0){
        // 直接调用vuex中toastStatus模块的asyncChangeIsShowToast方法
        store._actions['toastStatus/asyncChangeIsShowToast'][0]({
            msg: ret.message,
            type: 'danger'
        })
    }

    return ret
},err=>{
    return Promise.reject(err)
})


export default instance